import {defineConfig,loadEnv,} from 'vite'
import vue from '@vitejs/plugin-vue'
import {resolve} from "path";
import WindiCSS from 'vite-plugin-windicss'     // 引入windicss
import Inspect from 'vite-plugin-inspect'       // 解析文件编译过程
import VueSetupExtend from 'vite-plugin-vue-setup-extend' // setup语法糖配置name属性
import AutoImport from 'unplugin-auto-import/vite'  // 自动导入vue的属性
import Components from 'unplugin-vue-components/vite'   // 自动导入公共组件
import {NaiveUiResolver} from 'unplugin-vue-components/resolvers' // 自动导入naive
import {viteMockServe} from "vite-plugin-mock";     // mock配置
import {visualizer} from "rollup-plugin-visualizer";
// import sftpUploader from 'sftp-uploader'    // 自动部署
import * as path from "path"
import vueJsx from '@vitejs/plugin-vue-jsx'   // 支持jsx语法
import viteCompression from 'vite-plugin-compression'       // gzip压缩

// https://vitejs.dev/config/
// 智能提示
/** @type {import('vite').UserConfig} */
export default (({command,mode,}) => {
    // 设置第三个参数为 '' 来加载所有环境变量，而不管是否有 `VITE_` 前缀。
    const env = loadEnv(mode, process.cwd(), '')
    return {
        plugins: [vue(), vueJsx(), VueSetupExtend(), Inspect(), WindiCSS(),
            visualizer({emitFile: true, gzipSize: true}),
            AutoImport({
                imports: ['vue',],
            }),
            Components({resolvers: [NaiveUiResolver(),]}),
            viteMockServe({
                // default
                mockPath: 'mock',
                localEnabled: command === 'serve',
            }),
            // sftpUploader(sftpConfig)

            viteCompression({
                verbose: true,
                disable: false,
                threshold: 10240,
                algorithm: 'gzip',
                ext: '.gz',
            })
        ],
        resolve: {
            alias: {
                '@': resolve(__dirname, 'src'),
            },
        },
        server: {
            open: false,
            host: '0.0.0.0',
            port: 5002,
            proxy: {
                '/proxy': {
                    target: 'http://101.43.194.47:8005/',
                    // target: 'http://127.0.0.1:8000/',
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/proxy/, '')
                },
            },
        },
        build: {
            chunkSizeWarningLimit: 1500,
            minify: 'terser',
            terserOptions: {
                compress: {
                    //生产环境时移除console.log()
                    drop_console: true,
                    drop_debugger: true,
                },
            },
            rollupOptions: {
                output: {
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            return id.toString().split('node_modules/')[1].split('/')[0].toString();    // npm打包
                            // return id.toString().split('node_modules/')[1].split('/')[0].toString();     // pnpm的打包
                            // const arr = id.toString().split("node_modules/")[2].split("/")
                            // console.log(arr,"文件名字")
                            // switch(arr[0]){
                            //     case '@wangedit': // 自然框架
                            //     case 'vuedraggable':
                            //     case '@vue':
                            //     case 'naive-ui': // UI 库
                            //     case '@vicons/antd': // 图标
                            //     case '@vicons/carbon': // 图标
                            //     case '@vicons/fa': // 图标
                            //     case '@vicons/fluent': // 图标
                            //     case '@vicons/ionicons4': // 图标
                            //     case '@vicons/ionicons5': // 图标
                            //     case '@vicons/material': // 图标
                            //     case '@vicons/tabler': // 图标
                            //         return '_' + arr[0]
                            //     default :
                            //         return '__vendor'
                            // }
                        }
                    },
                }
            }
        },
        // css部分
        css: {
            requireModuleExtension: true,
        },
    }
})
